import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require('path')
import windicss from 'vite-plugin-windicss'
// import AutoImport from 'unplugin-auto-import/vite'
// import Components from 'unplugin-vue-components/vite'
// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import px2rem from 'postcss-plugin-px2rem'
import { createSvgIconsPlugin } from "vite-plugin-svg-icons"
import vueJsx from "@vitejs/plugin-vue-jsx";

// 配置插件参数
const postcss = {
  rootValue: 16, // 基准大小 baseSize，默认100需要和rem.ts中相同
  unitPrecision: 5, // 允许REM单位增长到的十进制数字，精度控制
  propWhiteList: [], // 白名单
  propLackList: [], // 黑名单
  exclude: false, // 排除某些文件夹中的方法，比如node_module
  selectorBlackList: [], // 要忽略并保留为px的选择器，可以是字符串或者正则表达式
  ignoreIdentifiler: false, // 一种忽略单个属性的方法，启用时replace自动启用
  replace: true, // 替换包含rems的规则，而不是添加的后背规则
  mediaQuery: false, // 允许在媒体查询中转换
  minPixeValue: 0 // 设置要替换的最小像素值，默认0
}


// https://vite.dev/config/
export default defineConfig({
  // 插件
  plugins: [
    vue(),
    windicss(),
    createSvgIconsPlugin({
      iconDirs: [path.resolve(__dirname, "src/assets/icons/svg")],
      symbolId: "icon-[name]",
    }),
    // AutoImport({
    //   resolvers: [ElementPlusResolver()],
    // }),
    // Components({
    //   resolvers: [ElementPlusResolver()],
    // }),
    vueJsx(),
  ],
  // 服务
  server:{
    open:true
  },
  // 解析
  resolve: {
    // 重名
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@assets': path.resolve(__dirname, './src/assets'),
      '@utils': path.resolve(__dirname, './src/utils'),
    },
    // 忽略后缀名的配置选项, 添加 .vue 选项时要记得原本默认忽略的选项也要手动写入
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
  },
  // 样式配置
  css: {
    postcss: {
      plugins: [px2rem(postcss)]
    },
    preprocessorOptions: {
      // css预处理器配置
      scss: {
        javascriptEnabled: true, // 允许scss文件中启用javascript表达式
        additionalData: `@use "@/style/mixin.scss";`, // 编译前插入scss文件顶部，若全局引入了可能会重复导入导致编译错误
      },
    },
  },
  // 构建
  build:{
    minify: "terser", // vite 在生产模式下会对 JavaScript 进行压缩以减小文件大小;必须启用：terserOptions配置才会有效
    terserOptions: {
      compress: {
        // 生产环境时移除console.log调试代码和注释
        drop_console: true,
        drop_debugger: true,
      },
    },
  }
  
})
